package cn.com.wangluotongxin.linux.utils;/**
 * Description: cmd-bike-agent
 * <p>
 * Created by asus on 2022/1/6 13:56
 */

import cn.hutool.core.date.DateUtil;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 类备注:
 *日期
 * Created by asus on 2021/3/8 16:13
 * QQ 2218574608 tel 13628610467
 */
public class DateSysUtils {

    /**
     * 当前日期
     * @return
     */
    public static Date getDate(){
        return new Date();
    }

    /**
     * 获取本月第一天或最后一天
     * @param date 日期
     * @param getType start 本月第一天 end 本月最后一天
     * @return String
     */
    public static String getStartOrEndDay(String date,String getType){
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
        Date newDate=null;
        try{newDate=simpleDateFormat.parse(date);}catch(Exception ex){ex.printStackTrace();}
        Calendar calendar=Calendar.getInstance();
        calendar.setTime(newDate);
        if(getType.equals("start")){
            int last = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
            calendar.set(Calendar.DAY_OF_MONTH, last);
            return simpleDateFormat.format(calendar.getTime());
        }else{
            int last = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
            calendar.set(Calendar.DAY_OF_MONTH, last);
            return simpleDateFormat.format(calendar.getTime());
        }
    }


    public static String getTimeInterval(Date date) {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        // 判断要计算的日期是否是周日，如果是则减一天计算周六的，否则会出问题，计算到下一周去了
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 设置一个星期的第一天，按中国的习惯一个星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根据日历的规则，给当前日期减去星期几与一个星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        String imptimeBegin = sdf.format(cal.getTime());
        // System.out.println("所在周星期一的日期：" + imptimeBegin);
        cal.add(Calendar.DATE, 6);
        String imptimeEnd = sdf.format(cal.getTime());
        // System.out.println("所在周星期日的日期：" + imptimeEnd);
        return imptimeBegin + "," + imptimeEnd;
    }

    public static List<String> getDays(String startTime, String endTime){
        List<String> days = new ArrayList<>();

        //获取区间天数
        Integer number = (int) DateUtil.betweenDay(DateUtil.parseDateTime(startTime), DateUtil.parseDateTime(endTime),true);
        //开始日期
        for(int i = 0; i <= number; i++){
            String newDateTime = DateUtil.format(DateUtil.offsetDay(DateUtil.parseDateTime(startTime),i),"yyyy-MM-dd");
            days.add(newDateTime);
        }
        return days;
    }

    public static List<String> getMonths(String startTime, String endTime) {
        List<String> months = new ArrayList<>();

        //获取区间天数
        Integer number = (int) DateUtil.betweenMonth(DateUtil.parseDateTime(startTime), DateUtil.parseDateTime(endTime),true);
        //开始日期
        for(int i = 0; i <= number; i++){
            String newDateTime = DateUtil.format(DateUtil.offsetMonth(DateUtil.parseDateTime(startTime),i),"yyyy-MM");
            months.add(newDateTime);
        }
        return months;
    }

    public static Boolean isDate(String date){
        try{
            DateUtil.parseDateTime(date);
        }catch (Exception ex){
            return false;
        }
        return true;
    }
}
